{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "<!--BOOK_INFORMATION-->\n",
    "<a href=\"https://www.packtpub.com/big-data-and-business-intelligence/machine-learning-opencv\" target=\"_blank\"><img align=\"left\" src=\"data/cover.jpg\" style=\"width: 76px; height: 100px; background: white; padding: 1px; border: 1px solid black; margin-right:10px;\"></a>\n",
    "*This notebook contains an excerpt from the upcoming book [Machine Learning for OpenCV](https://www.packtpub.com/big-data-and-business-intelligence/machine-learning-opencv) by Michael Beyeler (expected Aug 2017).\n",
    "The code is released under the [MIT license](https://opensource.org/licenses/MIT),\n",
    "and is available on [GitHub](https://github.com/mbeyeler/opencv-machine-learning).*\n",
    "\n",
    "*Note that this excerpt contains only the raw code - the book is rich with additional explanations and illustrations.\n",
    "If you find this content useful, please consider supporting the work by\n",
    "[buying the book](https://www.packtpub.com/big-data-and-business-intelligence/machine-learning-opencv)!*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "<!--NAVIGATION-->\n",
    "< [Using Decision Trees to Make a Medical Diagnosis](05.00-Using-Decision-Trees-to-Make-a-Medical-Diagnosis.ipynb) | [Contents](../README.md) | [Using Decision Trees to Diagnose Breast Cancer](05.02-Using-Decision-Trees-to-Diagnose-Breast-Cancer.ipynb) >"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "# Building your first decision tree\n",
    "\n",
    "Let's consider the example where a number of patients have suffered from the same illness - such as a rare form of basorexia. Let's further assume that the true causes of the disease remain unknown to this day, and that all the information that is available to us consists of a bunch of physiological measurements. For example, we might have access to the following information:\n",
    "\n",
    "- a patient's blood pressure ('BP'),\n",
    "- a patient's cholesterol level ('cholesterol'),\n",
    "- a patient's gender ('sex'),\n",
    "- a patient's age ('age'),\n",
    "- a patient's blood sodium concentration ('Na'), and\n",
    "- a patient's blood potassium concentration ('K').\n",
    "\n",
    "Based on all this information, let's suppose a doctor made recommendations for the patient to treat their disease using one of four possible drugs - drug A, B, C, or D. \n",
    "\n",
    "We have data available for 20 different patients:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "data = [\n",
    "    {'age': 33, 'sex': 'F', 'BP': 'high', 'cholesterol': 'high', 'Na': 0.66, 'K': 0.06, 'drug': 'A'},\n",
    "    {'age': 77, 'sex': 'F', 'BP': 'high', 'cholesterol': 'normal', 'Na': 0.19, 'K': 0.03, 'drug': 'D'},\n",
    "    {'age': 88, 'sex': 'M', 'BP': 'normal', 'cholesterol': 'normal', 'Na': 0.80, 'K': 0.05, 'drug': 'B'},\n",
    "    {'age': 39, 'sex': 'F', 'BP': 'low', 'cholesterol': 'normal', 'Na': 0.19, 'K': 0.02, 'drug': 'C'},\n",
    "    {'age': 43, 'sex': 'M', 'BP': 'normal', 'cholesterol': 'high', 'Na': 0.36, 'K': 0.03, 'drug': 'D'},\n",
    "    {'age': 82, 'sex': 'F', 'BP': 'normal', 'cholesterol': 'normal', 'Na': 0.09, 'K': 0.09, 'drug': 'C'},\n",
    "    {'age': 40, 'sex': 'M', 'BP': 'high', 'cholesterol': 'normal', 'Na': 0.89, 'K': 0.02, 'drug': 'A'},\n",
    "    {'age': 88, 'sex': 'M', 'BP': 'normal', 'cholesterol': 'normal', 'Na': 0.80, 'K': 0.05, 'drug': 'B'},\n",
    "    {'age': 29, 'sex': 'F', 'BP': 'high', 'cholesterol': 'normal', 'Na': 0.35, 'K': 0.04, 'drug': 'D'},\n",
    "    {'age': 53, 'sex': 'F', 'BP': 'normal', 'cholesterol': 'normal', 'Na': 0.54, 'K': 0.06, 'drug': 'C'},\n",
    "    {'age': 36, 'sex': 'F', 'BP': 'high', 'cholesterol': 'high', 'Na': 0.53, 'K': 0.05, 'drug': 'A'},\n",
    "    {'age': 63, 'sex': 'M', 'BP': 'low', 'cholesterol': 'high', 'Na': 0.86, 'K': 0.09, 'drug': 'B'},\n",
    "    {'age': 60, 'sex': 'M', 'BP': 'low', 'cholesterol': 'normal', 'Na': 0.66, 'K': 0.04, 'drug': 'C'},\n",
    "    {'age': 55, 'sex': 'M', 'BP': 'high', 'cholesterol': 'high', 'Na': 0.82, 'K': 0.04, 'drug': 'B'},\n",
    "    {'age': 35, 'sex': 'F', 'BP': 'normal', 'cholesterol': 'high', 'Na': 0.27, 'K': 0.03, 'drug': 'D'},\n",
    "    {'age': 23, 'sex': 'F', 'BP': 'high', 'cholesterol': 'high', 'Na': 0.55, 'K': 0.08, 'drug': 'A'},\n",
    "    {'age': 49, 'sex': 'F', 'BP': 'low', 'cholesterol': 'normal', 'Na': 0.27, 'K': 0.05, 'drug': 'C'},\n",
    "    {'age': 27, 'sex': 'M', 'BP': 'normal', 'cholesterol': 'normal', 'Na': 0.77, 'K': 0.02, 'drug': 'B'},\n",
    "    {'age': 51, 'sex': 'F', 'BP': 'low', 'cholesterol': 'high', 'Na': 0.20, 'K': 0.02, 'drug': 'D'},\n",
    "    {'age': 38, 'sex': 'M', 'BP': 'high', 'cholesterol': 'normal', 'Na': 0.78, 'K': 0.05, 'drug': 'A'}\n",
    "]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Understanding the task by understanding the data\n",
    "\n",
    "What is always the first step in tackling a new machine learning problem?\n",
    "\n",
    "You are absolutely right: to get a sense of the data. The better you understand the data, the better you understand the problem you are trying to solve.\n",
    "\n",
    "The first thing to realize is that the 'drug' column is actually not a feature value like all the other columns. \n",
    "\n",
    "Thus, it would be a good idea to remove all 'drug' entries from the dictionaries listed in the 'data' variable and store them in a separate variable. For this we need to go through the list and extract the 'drug' entry, which is easiest to do with a list comprehension:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['A',\n",
       " 'D',\n",
       " 'B',\n",
       " 'C',\n",
       " 'D',\n",
       " 'C',\n",
       " 'A',\n",
       " 'B',\n",
       " 'D',\n",
       " 'C',\n",
       " 'A',\n",
       " 'B',\n",
       " 'C',\n",
       " 'B',\n",
       " 'D',\n",
       " 'A',\n",
       " 'C',\n",
       " 'B',\n",
       " 'D',\n",
       " 'A']"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "target = [d['drug'] for d in data]\n",
    "target"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Then remove the 'drug' entry from all the dictionaries:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "[d.pop('drug') for d in data];"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Sweet! Now let's look at the data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "plt.style.use('ggplot')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[33,\n",
       " 77,\n",
       " 88,\n",
       " 39,\n",
       " 43,\n",
       " 82,\n",
       " 40,\n",
       " 88,\n",
       " 29,\n",
       " 53,\n",
       " 36,\n",
       " 63,\n",
       " 60,\n",
       " 55,\n",
       " 35,\n",
       " 23,\n",
       " 49,\n",
       " 27,\n",
       " 51,\n",
       " 38]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "age = [d['age'] for d in data]\n",
    "age"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "sodium = [d['Na'] for d in data]\n",
    "potassium = [d['K'] for d in data]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x2e060987198>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2e0605eb128>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 6))\n",
    "plt.scatter(sodium, potassium)\n",
    "plt.xlabel('sodium')\n",
    "plt.ylabel('potassium')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "But, what we really want is to color the data points according to their target labels:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0, 3, 1, 2, 3, 2, 0, 1, 3, 2, 0, 1, 2, 1, 3, 0, 2, 1, 3, 0]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "target = [ord(t) - 65 for t in target]\n",
    "target"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA10AAAJlCAYAAAAhJZgrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlgVPW5//H3ObNkksxkD0tYZdWGRcQFRUWo3qvFttSF\n+mtvF6u2tlpBq63WurTXFlvl1iJaN65oaXtBLWpbWrVVKSIqRUEIsi9BMGwBsmeWc35/UFNiMpMh\nyZk5ST6vf2DmfJPzyTeTeeY5q2Hbto2IiIiIiIg4wkx3ABERERERke5MTZeIiIiIiIiD1HSJiIiI\niIg4SE2XiIiIiIiIg9R0iYiIiIiIOEhNl4iIiIiIiIO86Q5wrNWrVzN//nxs22by5MlMmzat2fIP\nPviA+fPnU15ezsyZMznjjDMA2LFjB0888QT19fWYpskXvvAFzjrrrHT8CCIi0o2pTomISHu4Zk+X\nZVnMmzeP22+/ndmzZ7N8+XJ2797dbExxcTHXXXcdZ599drPnA4EA119/PbNnz+aHP/whTz31FHV1\ndUmtt6ysrNN+hu5GcxOf5iY+zU18mpv4usLcqE615OZs4O58bs4G7s7n5mzg7nzK1n4dzeeapmvL\nli307duX4uJivF4vEydOZOXKlc3GFBUVMXDgQAzDaPZ8nz596NOnDwD5+fnk5ORQVVWV1Hrd/gtO\nJ81NfJqb+DQ38Wlu4usKc6M61ZKbs4G787k5G7g7n5uzgbvzKVv7dZumq7KyksLCwqbHBQUFVFZW\nHvf32bJlC7FYrKm4iYiIdAbVKRERaS/XNF2t+eSWwrYcOnSIuXPn8p3vfMehRCIiIv+mOiUiIskw\nbNu20x0CYNOmTTzzzDPcfvvtADz//PMALU5SBnj44YcZP3580wnKAPX19dx9991ccsklzZ7/pLKy\nsma7B6dPn95ZP4KIiHTAokWLmv5fWlpKaWlpGtO0pDolItKzdaROuebqhcOGDaOiooL9+/eTn5/P\n8uXLmTFjRtzxx/aK0WiU++67j0mTJiUsZND6BO3Zs6dj4bupUChEdXV1umO4kuYmPs1NfJqb+EpK\nSlzfXKhOteT217Sb87k5G7g7n5uzgbvzKVv7dbROuabpMk2Tq666invuuQfbtpkyZQr9+/dn0aJF\nDB06lPHjx7N161buv/9+amtrWbVqFc888wyzZ89mxYoVbNiwgdraWl5//XUMw+A73/kOgwYNSveP\nJSIi3YTqlIiItJdrDi9MJ7duQUw3t29xSCfNTXyam/g0N/GVlJSkO4KrubVOuf017eZ8bs4G7s7n\n5mzg7nzK1n4drVOuvpCGiIiIiIhIV6emS0RERERExEFqukRERERERBykpktERERERMRBarpERERE\nREQcpKZLRERERETEQWq6REREREREHKSmS0RERERExEFqukRERERERBykpktERERERMRBarpERERE\nREQcpKZLRERERETEQWq6REREREREHKSmS0RERERExEFqukRERERERBykpktERERERMRBarpERERE\nREQcpKZLRERERETEQWq6REREREREHKSmS0RERERExEFqukRERERERBykpktERERERMRBarpERERE\nREQcpKZLRERERETEQWq6REREREREHKSmS0RERERExEFqukRERERERBzkTXeAY61evZr58+dj2zaT\nJ09m2rRpzZZ/8MEHzJ8/n/LycmbOnMkZZ5zRtOz1119n8eLFAFxyySVMmjQppdlFRKT7U50SEZH2\ncM2eLsuymDdvHrfffjuzZ89m+fLl7N69u9mY4uJirrvuOs4+++xmz9fU1PDcc88xa9Ysfvazn/Hs\ns89SV1eXyvgiItLNqU6JiEh7uabp2rJlC3379qW4uBiv18vEiRNZuXJlszFFRUUMHDgQwzCaPb9m\nzRrGjBlDVlYW2dnZjBkzhtWrV6cyvoiIdHOqUyIi0l6uaboqKyspLCxselxQUEBlZaXjXysiIpIM\n1SkREWkv1zRdrfnklsJ4bNt2OImIiEhLqlMiIpIM11xIo6CggAMHDjQ9rqysJD8/P6mvLSwspKys\nrOnxwYMHGTVqVKtjy8rKmo2dPn06oVConam7N7/fr7mJQ3MTn+YmPs1NYosWLWr6f2lpKaWlpWlM\n05LqVEtuf027OZ+bs4G787k5G7g7n7J1TEfqlGuarmHDhlFRUcH+/fvJz89n+fLlzJgxI+74Y7ca\njh07lv/7v/+jrq4Oy7JYu3YtX/7yl1v9utYmqLq6unN+iG4mFAppbuLQ3MSnuYlPcxNfKBRi+vTp\n6Y6RkOpUS25/Tbs5n5uzgbvzuTkbuDufsrVfR+uUa5ou0zS56qqruOeee7BtmylTptC/f38WLVrE\n0KFDGT9+PFu3buX++++ntraWVatW8cwzzzB79myCwSCXXnopt956K4ZhcNlll5GdnZ3uH0lERLoR\n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\n3p8u5JUbfoFtWc3GlUycyJRf/pLMYy6L3NO5fWtMOnX3udlmZvKVIyF2xJofKJCJzYK8aiZQE+cr\nU4ye3ioAACAASURBVDs3kYjFkiXlXH/931qcnD9hQglz5kymX7+slGRJRle4ZHw6ubVOOf2afosg\nXzkSos5u3o0M8kRZkFvNEMu9l4wPeD8kJ3YtXt7DxuS97Q/xpW/Us3Fj82Y7I8PDk09eyDnn9MU0\nXdB1AZGaGj548knevvfeFstOvOIKTr/tNjKKitKQ7Ci31xk351O29utonVLThXuLWSr4PfvxGx/g\nt5cQjYT4aOvZ7HpzMxUrV5NZVMQJF11E3vDh+AsK0h3VVdz+xpBOPWFu9hp+1lt+ljT6CdsG52ZE\nGO8JM9huSPh1qZ6baNRi+/YaVqzYwzvvVJCfn8HUqUMYMSKPgoK2L1KQSmq6EnNrnUrFa3qHEeDd\nmJ+ljT78hs1nMsJ8ygzT2w67Il8ifs9BfMYGMuwlYFezff+VvF9WwJ+XfEhdXZSJE/tx2mm9OeGE\nkCv2ch3LbxjsXbeOXa+/zsGyMnIGDWLQBReQO3w4vjSfd5Pu32tb3JxP2dpPTVcncGsxS6WPT0L+\n+OVgGEarlzqWo9z+xpBOPWluPvl305Z0zs3xZk01NV2JubVOpfI13Z7XsFvej7pijT127tz2/uGW\n32s8bs6nbO3X0TrlmgtpSHp98o3Utu02L4Us0tO55QNIMrpSVpHWdOXXcFevsV157kXcwjUX0hAR\nEREREemO1HSJiIiIiIg4SE2XiIiIiIiIg9R0iYiIiIiIOEhNl4iIiIiIiIPUdImIiIiIiDhITZeI\niIiIiIiD1HSJiIiIiIg4SE2XiIiIiIiIg9R0iYiIiIiIOEhNl4iIiIiIiIPUdImIiIiIiDhITZeI\niIiIiIiD1HSJiIiIiIg4SE2XiIiIiIiIg9R0iYiIiIiIOEhNl4iIiIiIiIPUdImIiIiIiDhITZeI\niIiIiIiD1HSJiIiIiIg4SE2XiIiIiIiIg9R0iYiIiIiIOEhNl4iIiIiIiIPUdImIiIiIiDhITZeI\niIiIiIiDvOkOcKzVq1czf/58bNtm8uTJTJs2rdnyaDTK3Llz2bZtG6FQiBtvvJGioiIAFi9ezGuv\nvYbH4+HrX/86Y8eOTcePICIi3ZjqlIiItIdr9nRZ/5+9O4+PqjzYPn6dmclkD8kkIEmQNVAliiiL\nCsqmrY9olSqS6quVfqha0IJLUXFDhLoriqhFhYKl1aIoivsG+IiiYEEhaDEiO4EkQwjZMzPn/YOH\nKZGEhJAz5yT8vv/AzLkn55o7k5xcc5YJhTR79mzdeeedeuyxx7R8+XJt37691phPPvlECQkJmjFj\nhi644ALNnz9fkrRt2zZ98cUXmj59uiZNmqQXXnhBpmna8TQAAK0U2ykAQFM5pnTl5eUpPT1dbdu2\nlcfj0cCBA7Vy5cpaY1auXKnBgwdLks444wytW7dOkrRq1SoNGDBAbrdb7dq1U3p6uvLy8iL+HAAA\nrRfbKQBAUzmmdPn9fqWmpoZv+3w++f3+ese4XC7FxcWptLRUfr8/fPhGfY8FAOBosJ0CADSVo87p\n+jnDMBo1rq5DNOp7bG5urnJzc8O3R40apcTExKYFbOW8Xi9zUw/mpn7MTf2Ym8NbsGBB+P/Z2dnK\nzs62MU3jHOvbKae/pp2cz8nZJGfnc3I2ydn5yHZ0jmY75ZjS5fP5VFhYGL7t9/uVkpJSa0xqaqqK\niork8/kUCoVUXl6uhIQEpaam1npsUVHRIY89oK4J2rdvXzM+k9YjMTGRuakHc1M/5qZ+zE39EhMT\nNWrUKLtjHBbbqUM5/TXt5HxOziY5O5+Ts0nOzke2pjva7ZRjDi/MyspSfn6+CgoKFAgEtHz5cvXt\n27fWmD59+mjZsmWSpC+++EInnXSSJKlv3776/PPPFQgEtHv3buXn5ysrKyvizwEA0HqxnQIANJVj\n9nS5XC6NGTNG06ZNk2maGjZsmDp06KAFCxaoW7du6tOnj4YNG6annnpK48ePV2JioiZMmCBJ6tCh\ng84880zddNNN8ng8+sMf/tDoQz4AAGgMtlMAgKYyTK5Zqx07dtgdwZGcvpvXTsxN/Zib+jE39cvI\nyLA7gqM5dTvl9Ne0k/M5OZvk7HxOziY5Ox/Zmu5ot1OOObwQAAAAAFojShcAAAAAWIjSBQAAAAAW\nonQBAAAAgIUoXQAAAABgIUoXAAAAAFiI0gUAAAAAFqJ0AQAAAICFKF0AAAAAYCFKFwAAAABYiNIF\nAAAAABaidAEAAACAhShdAAAAAGAhShcAAAAAWIjSBQAAAAAWonQBAAAAgIUoXQAAAABgIUoXAAAA\nAFiI0gUAAAAAFqJ0AQAAAICFKF0AAAAAYCFKFwAAAABYiNIFAAAAABaidAEAAACAhShdAAAAAGAh\n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\nTvi+devWOSKbJJmmKfNnF7N2yve1oqJC33//vYYOHSpJcrvdiouLc0y+A9auXavjjjtOaWlpjskW\nCoVUWVmpYDCo6upq+Xw+x/xMbN++Xd27d1dUVJRcLpdOPPFEffXVV/r6669tm7vG/P5dtWqVpKZt\nr1r94YV+v1+pqanh2z6fT3l5efWOcblcio+PV2lpqRISEiKaNdIaMzcH++STT9S7d+9IRLNdY+Zm\n06ZN8vv9Ou2007R48eJIR7RNY+Zm586dkqS7775bpmlq5MiRvHYOctlll2natGl69913VVVVpbvv\nvjvSMR2prrnz+/1KTk62MZX99u7dG56D5ORklZSU2JxI2r17tzZv3qwePXo4Jl8oFNLtt9+uXbt2\n6bzzztNxxx2n+Ph4uVz7319OTU3Vnj17bMk2b948XXXVVSovL5ck7du3TwkJCY7IJu1/I+gvf/mL\nDMPQueeeq3POOccx39ddu3YpMTFRzzzzjDZv3qyuXbtq9OjRjsl3wOeff66zzjpLkjN+Zn0+ny68\n8EKNGzdO0dHR6tWrl7p06eKYn4njjz9eL7/8skpLSxUVFaXVq1era9euKi4utn3uDvbz7+XevXsl\nNW171epLV10Mwzjs8p+/23MsqW9uPv30U23cuFH33ntvZAM5yMFzY5qm5s2bp+uvv97GRM7x89dN\nMBhUfn6+pkyZosLCQk2ePFmPPfaYbecD2O3n8/PZZ59pyJAhuvDCC7VhwwY99dRTevzxx21K52wN\n/b5G5FVWVurxxx/X6NGjFRMTY3ecMJfLpYcffljl5eV69NFHtX379kPG2PF6OnCOSOfOnZWbmyup\n7j1Ldr7Wp02bFv4Dd9q0acrIyLAty8+FQiH99NNPGjNmjLp166a5c+dq0aJFdseqJRAIaNWqVfp/\n/+//2R0lrKysTKtWrdIzzzyjuLg4Pf7441q9evUh4+x63WVmZuriiy/W1KlTFRsbq86dO9t2bllz\naWguW33p8vl8KiwsDN/2+/1KSUmpNSY1NVVFRUXy+XwKhUKqqKho9Xu5pMbNjSR9++23WrRokaZM\nmSKPp9W/ZCQ1PDcVFRXaunWr7r33XpmmqeLiYj388MO69dZbW/3FNBr7M9WjRw+5XC61a9dOGRkZ\nys/Pb/VzIzVufpYsWaI777xT0v7DdmtqalRSUnJMHYZZF5/Pp6KiovDtoqKiOn8nHWuSk5PD7/4W\nFxerTZs2tmUJBoN67LHHNGjQIPXr189x+SQpLi5OPXv21IYNG1RWVqZQKCSXy2Xb6+n777/XqlWr\ntHr1alVXV6uiokJz584NX0jHzmwHHHh3PikpSf369VNeXp5jvq8+n0+pqanq1q2bpP2ngSxatMgx\n+aT9F0/q2rVr+He4E7KtXbtW7dq1C/89279/f8f8TBwwdOjQ8GGjL730klJTUx0xdwerL09Ttlet\n/pyurKws5efnq6CgQIFAQMuXL1ffvn1rjenTp4+WLVsmSfriiy900kkn2RE14hozNz/99JOef/55\n3XrrrUpMTLQpaeQ1NDdxcXF64YUXNHPmTD399NPq0aOHbrvttmOiVDTmddOvXz+tW7dOklRSUqKd\nO3eqXbt2dsSNuMbMT1pamr799ltJ0rZt21RTU3PMFK663uE/oG/fvuHfxRs2bFB8fPwxeWjhz+eo\nT58+Wrp0qSRp6dKlh7yeIunZZ59Vhw4dNHz48PB9TshXUlISPnSvurpaa9euVYcOHZSdna0VK1ZI\nkpYtW2ZLtiuuuELPPvusZs6cqRtvvFEnnXSSxo8f74hsklRVVaXKykpJ+/difvvtt+rYsaMjvq/S\n/j96U1NTtWPHDkkKf2+dkk/af/TCwIEDw7edkC0tLU0//PCDqqurZZqmo34mDjhw6GBhYaG++uor\nnXXWWbbPXWN//zZle2WYx8CxdGvWrNHf/vY3maapYcOGacSIEVqwYIG6deumPn36qKamRk899ZQ2\nbdqkxMRETZgw4Zj5A7GhuZk6daq2bt2qlJQUmaaptLQ03XrrrXbHjoiG5uZgU6ZM0VVXXXVMlC6p\ncXPz4osvas2aNXK73brkkkt05pln2pw6chqan23btmnWrFmqrKyUy+XSlVdeqZNPPtnu2JZ78skn\ntX79eu3bt09t2rTRqFGjFAgEwueRSNLs2bO1Zs0axcTEaOzYscfMz9QBdc1Rv379NH36dBUWFiot\nLU0333zzYS9IYpXvv/9ekydPVseOHWUYhgzD0OWXX66srCzb823ZskVPP/20QqGQTNPUgAEDdMkl\nl2j37t164oknVFZWps6dO+tPf/qTrUdsrF+/XosXLw5fMt4J2Xbv3q1HHnlEhmEoGAzq7LPP1ogR\nI1RaWmr79/WATZs2adasWQoEAjruuOM0btw4hUIhR+Srrq7W2LFjNXPmTMXGxkqSY+bulVde0eef\n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\np65dExUXF5FPNnAEt6tS8cF75NGmOpfHmC+rxjVINbo4ssEAAADQZJb8NTthwgRt2bJFH374oWbO\nnKndu3eHl7Vv316nnnqqbrzxRh1//PFWrL7VM01TZ5yRoaVLtx52XP/+7RUKhSKU6uiUlQX03nub\nNXny59qzpzJ8/4ABGbr//rPVvXuSjekix+vaqKjgR4cdExt8RJXuQaoJpkQoFQAAAI6GZbsQOnbs\nqDFjxkiSqqqqVFZWpvj4eEVHc2GHo2Waps45p6MefPDLw44bNKhDhBIdHdOU3nhjoyZOXHbIss8/\n36FLL31TixZdrK5dE21IF1lu5auhA0I9+kluY49qROkCAABoCSLyYU7R0dHy+XwUrmaUlZWkhx4a\nVO/yxx4bom7dWsbeoW3byjR58vJ6lxcVVeittzYeE+enmXI3YoykRowDAACAM/AJui2U1+vSyJFZ\nWrjwYg0d2jF8/7nndtRrr12s3/ymm7zelvHt/eGHYpWXBw475tln12j37srDjmkNguosU7GHHVNj\n/Eo1ofYRSgQAAICjdexcoaAViolx64wz2ql373NVVFQtw5B8vmjFxLSMsnVAQ4VLkkpKqlVT0zLO\nTzsaVcGOKnfdpPjQ/XUuN+VShftPCtaw1xgAAKCloHS1AjExbmVmHn7viJP5fDENjunYMemYuIqh\naRoq1+VyuUoUE3pahv575UlTcSp1P63yQC8bEwIAAOBItf6/YuF43bsnKz09Xjt3ltU75pZb+io5\nOSqCqexTE/Rpr+tmVbovUZTWyjD9ChqdFFBPVQU7yDRb/7ltAAAArYnlpWvTpk2aN2+eNm3apMrK\n2ufkvPTSS1avHi1A27bRevrpc5WTs7jOQwgHDMjQ2Wdn2pDMPqFQtCpCv1CFfmF3FAAAABwly0vX\nk08+qdNPP12///3v5fV6rV4dWqj+/dvprbcu0V//ukZvvPGjQiFTbdvG6qab+uq88zrpuOMaPgQR\nAAAAcCLLS1dxcbFycnKOict9o+kMQzrppBRNnz5EEyf2V01NUElJXrVrR9kCAABAy2b5Ze4GDx6s\nzz77zOrVoJWIijLUqVO8srKSKFwAAABoFSzf0zVixAjdddddev3119WmTZtayyZPnmz16gEAAADA\nVpaXrscff1zt2rVT//79OacLAAAAwDEnIlcvnDNnjjwerk4PAAAA4Nhj+TldJ554orZt22b1agAA\n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\nWZYlr9ern/3sZ644rpLU09OjX/3qVzp9+rQsy9KSJUs0atQoV2Q7e/astmzZIsuyZIzR+fPnNX/+\nfE2bNs0V+d59910dOHBAlmWpqKhIS5cuVTgcds3jbu/evdq3b58kOX4+udVz72uvvaaGhgZlZmZq\n2bJlKi4utj0jAAC2MkPI3/72N9Pc3GzWrFmT3PbGG2+YPXv2GGOM+f3vf2927drlSLaLFy+a5uZm\nY4wxvb29ZsWKFeaf//yna/JFIhFjjDHxeNw888wzpqmpyWzatMkcPnzYGGPMtm3bzJ///GdHshlj\nzDvvvGOqqqrMz3/+c2OMcVW2ZcuWmc7OzgHb3HJcq6urzf79+40xxsRiMdPd3e2abFeKx+Nm8eLF\npqWlxRX52trazLJly0xfX58x5vLj7cCBA6553H3yySdmzZo1JhqNmng8btatW2f+9a9/ObbvbuXc\n+8EHH5if/vSnxhhjmpqazDPPPJOSjAAA2GlILS+cMGGCsrOzB2yrq6vT9OnTJUkPPfSQamtrnYim\n3Nzc5Ku5WVlZuvPOO9XW1uaafJmZmZIuz3rF43FZlqVjx45p8uTJkqTp06fr6NGjjmRra2tTfX29\nZs2aldz20UcfuSKbJBljZK66Xo0bjmtvb69OnDihGTNmSJK8Xq98Pp8rsl2tsbFRBQUFCoVCrsmX\nSCQUiUQUj8cVjUYVCARc85w4c+aMxo0bp/T0dHk8Ht199906evSo3n//fUf23ec599bV1UmSamtr\nk9vHjRunnp4etbe3pyQnAAB2GVLLC6/n008/VW5urqTLxaejo8PhRNKFCxd06tQpjR8/3jX5EomE\nfvSjH+n8+fP61re+pYKCAmVnZ8vjudzbg8GgLl686Ei2nTt36vHHH1dPT48kqbOzUzk5Oa7IJkmW\nZeknP/mJLMvS7NmzNWvWLFcc1/Pnz8vv9+ull17SqVOnVFJSooULF7oi29UOHz6sBx98UJI7nrOB\nQECPPPKIli5dqszMTN13330aPXq0a54Td911l37zm9+oq6tL6enpqq+vV0lJidrb2x3fd/2uPo6f\nfvqpJCkcDisYDCbHBQIBhcPh5FgAAAajIV+63CYSiWjTpk1auHChsrKynI6T5PF49Pzzz6unp0cb\nNmzQmTNnrhljWVbKc/W/T6S4uFjHjh2TdP2ZJSey9Vu/fn3yD9z169frjjvucCzLlRKJhJqbm7Vo\n0SKNGTNGO3bs0J49e5yOdY1YLKa6ujp973vfczpKUnd3t+rq6vTSSy/J5/Np06ZNqq+vv2acU4+7\nO++8U48++qjWrVunYcOGqbi42LH3lt0OTj5/AQC4HYZ86crNzU2++tve3q4RI0Y4liUej2vjxo2a\nNm2aJk2a5Lp8kuTz+XTPPfeoqalJ3d3dSiQS8ng8amtrU15eXsrznDhxQnV1daqvr1c0GlVvb692\n7Nihnp4ex7P163+Ffvjw4Zo0aZJOnjzpiuMaCAQUDAY1ZswYSdKUKVO0Z88eV2S7UkNDg0pKSjR8\n+HBJ7nhONDY2Kj8/Xzk5OZKk+++/3zXPiX4zZsxILh196623FAwGXbHv+t0oSyAQUFtbW3Kc0/sR\nAIDbYUi9p0u6dhakrKxMBw8elCQdPHhQ5eXlDiW7fIWvwsJCzZkzJ7nNDfk6OjqSS/ei0agaGxtV\nWFio0tJSHTlyRJJUU1PjSLYFCxbo5ZdfVnV1tb7//e/r3nvv1YoVK1yRTZIuXbqkSCQi6fIs5l//\n+lcVFRW54rjm5uYqGAzq7NmzkpQ8rm7IdqW//OUvmjp1avJ7N+QLhUL6+OOPFY1GZYxx1XOiX//S\nwdbWVh09elQPPvigo/vu8557y8vLVVNTI0lqampSdnY2SwsBAIOeZa5eh/UlVlVVpePHj6uzs1Mj\nRoxQRUWFJk2apM2bN6u1tVWhUEirV6++5g3fqXDixAlVVlaqqKhIlmXJsiw99thjGjt2rOP5Pvnk\nE7344otKJBIyxuiBBx7Qt7/9bV24cEFbtmxRd3e3iouLtXz5cqWlOTd5evz4cb3zzjvJS8a7IduF\nCxf0y1/+UpZlKR6P6xvf+IbmzZunrq4ux4+rJP3jH//QK6+8olgspoKCAi1dulSJRMIV2aTLJX/J\nkiWqrq7WsGHDJMk1++7tt9/W4cOH5fV6VVxcrCeffFLhcNgVjztJqqysVFdXl7xer5544gmVlpY6\ntu9u9dz76quvqqGhQVlZWVqyZIlKSkpszwgAgJ2GVOkCAAAAgFQbcssLAQAAACCVKF0AAAAAYCNK\nFwAAAADYiNIFAAAAADaidAEAAACAjShdAAAAAGAjShcAAAAA2IjSBQAAAAA2onQBAAAAgI3SnA4A\n4Mb27Nmjffv2qaOjQ6FQSPPnz9f999+vRCKhXbt2qaamRj6fT3PnztWvf/1rvfXWW/J4POrp6dHr\nr7+u+vp6eTweTZ8+XfPnz5dlWU7fJQAAgCGH0gW42MiRI7Vu3Trl5ubqvffeU3V1tV544QUdPXpU\nH374oTZs2KDMzExt3LhxwM9VV1crEAho69atikQi+sUvfqFQKKTZs2c7dE8AAACGLpYXAi42ZcoU\n5ebmSpK+/vWva+TIkTp58qSOHDmihx9+WHl5efL5fJo3b17yZ9rb2/Xhhx/qiSeeUEZGhoYPH645\nc+bo0KFDTt0NAACAIY2ZLsDFampq9Mc//lEtLS2SpEgkoo6ODl28eFGhUCg5LhgMJr9ubW1VLBbT\n4sWLk9uMMQPGAwAAIHUoXYBLtba2atu2baqsrNT48eMlSU8//bQkKS8vT21tbQPG9guFQsrIyNBr\nr73Ge7gAAABcgOWFgEtFIhFZliW/369EIqEDBw7o9OnTki4vO9y7d6/C4bC6u7v1hz/8Iflzubm5\nuu+++7Rz50719vbKGKPz58/r+PHjTt0VAACAIY2ZLsClCgsL9cgjj2jt2rXyeDyaNm2aJkyYIEma\nPXu2zp07px/84Afy+Xx6+OGHdfz4cXk8l19Heeqpp/Tmm29q9erVikQiys/P16OPPurk3QEAABiy\nLGOMcToEgH9PQ0ODtm/frhdffNHpKAAAALgKywuBQSgajaq+vl6JRELhcFhvv/22Jk+e7HQsAAAA\nXAczXcAgFI1GVVlZqbNnzyojI0NlZWVauHChsrKynI4GAACAq1C6AAAAAMBGLC8EAAAAABtRugAA\nAADARpQuAAAAALARpQsAAAAAbETpAgAAAAAbUboAAAAAwEb/B/5xBCzl/v0oAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2e06060af60>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(14, 10))\n",
    "\n",
    "plt.subplot(221)\n",
    "plt.scatter([d['Na'] for d in data], [d['K'] for d in data],\n",
    "            c=target, s=100)\n",
    "plt.xlabel('sodium (Na)')\n",
    "plt.ylabel('potassium (K)')\n",
    "\n",
    "plt.subplot(222)\n",
    "plt.scatter([d['age'] for d in data], [d['K'] for d in data],\n",
    "            c=target, s=100)\n",
    "plt.xlabel('age')\n",
    "plt.ylabel('potassium (K)')\n",
    "\n",
    "plt.subplot(223)\n",
    "plt.scatter([d['age'] for d in data], [d['Na'] for d in data],\n",
    "            c=target, s=100)\n",
    "plt.xlabel('age')\n",
    "plt.ylabel('sodium (Na)')\n",
    "plt.savefig('all.png')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Preprocessing the data\n",
    "\n",
    "We need to convert all categorical features into numerical features:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "from sklearn.feature_extraction import DictVectorizer\n",
    "vec = DictVectorizer(sparse=False)\n",
    "data_pre = vec.fit_transform(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['BP=high',\n",
       " 'BP=low',\n",
       " 'BP=normal',\n",
       " 'K',\n",
       " 'Na',\n",
       " 'age',\n",
       " 'cholesterol=high',\n",
       " 'cholesterol=normal',\n",
       " 'sex=F',\n",
       " 'sex=M']"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vec.get_feature_names()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  1.  ,   0.  ,   0.  ,   0.06,   0.66,  33.  ,   1.  ,   0.  ,\n",
       "         1.  ,   0.  ])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_pre[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Convert to 32-bit floating point numbers in order to make OpenCV happy:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "data_pre = np.array(data_pre, dtype=np.float32)\n",
    "target = np.array(target, dtype=np.float32).reshape((-1, 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((20, 10), (20, 1))"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_pre.shape, target.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Then split data into training and test sets:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "import sklearn.model_selection as ms\n",
    "X_train, X_test, y_train, y_test = ms.train_test_split(data_pre, target, test_size=5, random_state=42)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Building the decision tree\n",
    "\n",
    "Building the decision tree with OpenCV works in much the same way as in Chapter 3, First Steps in Supervised Learning. Recall that all machine learning function reside in OpenCV 3.1's ml module. You can create an empty decision tree using the following code:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "import cv2\n",
    "dtree = cv2.ml.DTrees_create()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Then train the model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "dtree.train(X_train, cv2.ml.ROW_SAMPLE, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Predict some values:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "y_pred = dtree.predict(X_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Calculate the score on the training and test sets:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "from sklearn import metrics\n",
    "metrics.accuracy_score(y_test, dtree.predict(X_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "metrics.accuracy_score(y_train, dtree.predict(X_train))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Visualizing a trained decision tree\n",
    "\n",
    "OpenCV's implementation of decision trees is good enough if you are just starting out, and don't care too much what's going on under the hood. However, in the following sections we will switch to Scikit-Learn. Their implementation allows us to customize the algorithm and makes it a lot easier to investigate the inner workings of the tree. Their usage is also much better documented..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "from sklearn import tree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "dtc = tree.DecisionTreeClassifier()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "The model is trained by calling `fit`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,\n",
       "            max_features=None, max_leaf_nodes=None,\n",
       "            min_impurity_split=1e-07, min_samples_leaf=1,\n",
       "            min_samples_split=2, min_weight_fraction_leaf=0.0,\n",
       "            presort=False, random_state=None, splitter='best')"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dtc.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dtc.score(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.40000000000000002"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dtc.score(X_test, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Now, here's the cool thing: If you want to know what the tree looks like, you can do so using GraphViz to create a PDF file (or any other supported file type) from the tree structure. For this to work, you need to install GraphViz first, which you can do from the command line using conda:\n",
    "\n",
    "    $ conda install graphviz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "with open(\"tree.dot\", 'w') as f:\n",
    "    f = tree.export_graphviz(dtc, out_file=f,\n",
    "                            feature_names=vec.get_feature_names(),\n",
    "                            class_names=['A', 'B', 'C', 'D'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "Then, back on the command line, you can use GraphViz to turn \"tree.dot\" into (for example) a PNG file:\n",
    "\n",
    "    $ dot -Tpng tree.dot -o tree.png"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Rating the importance of features\n",
    "\n",
    "Scikit-Learn provides a function to rate feature importance, which is a number between 0 and 1 for each feature, where 0 means \"not used at all in any decisions made\" and 1 means \"perfectly predicts the target\". The feature importances are normalized such that they all sum to 1:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.        ,  0.        ,  0.        ,  0.13554217,  0.29718876,\n",
       "        0.24096386,  0.        ,  0.32630522,  0.        ,  0.        ])"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dtc.feature_importances_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "If we remind ourselves of the feature names, it will become clear which features seem to be the most important. A plot might be most informative:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nAIBRlBAAAAAARlFCAAAAABhFCQEAAABgFCUEAAAAgFGUEAAAAABGNfplhbh05N2SbnuETsnj8SgU\nCtkeo9Mif7vI3x6yt4v87eoo+SfHd96n4p13zzugS+3LbjoKn8+n8vJy22N0WuRvF/nbQ/Z2kb9d\n5H/p43QsAAAAAEZRQgAAAAAYRQkBAAAAYBQlBAAAAIBRlBAAAAAARlFCAAAAABhFCQEAAABgFCUE\nAAAAgFGUEAAAAABGUUIAAAAAGGWshKxevVo7d+5s8valpaWaM2dOi+5rw4YNLbrd98nNzdWBAwea\ntO337eeZM2e0YsWKRm8/efLkZs8HAAAAXEra9ZEQl8vVotu1pISEw+EW3VdTdevWTb/85S8b3a6l\n+wwAAABcKrwXa+EPPvhAGzdulMvlUlpamtxut4qKirRx40aVlZXpvvvu0+jRoyVJL7/8snbv3i23\n262JEydqzJgxddYKh8Nav369ioqKVFNTo5tvvlnjx49XWVmZVq5cqaqqKoVCIWVnZ+vTTz9VMBhU\nTk6OUlNTNXPmTG3dulV//OMfFQqF1L9/f2VnZ8vlcmny5MkaP3689uzZowcffFDBYFDr1q1TOBxW\nv379lJ2dLa+3+RE1tJ+lpaV66qmntHz5cgWDQT333HM6fPiwevfurTNnzujBBx9Uenq6HMfRH/7w\nB33yySeKiYnRvHnz1KVLlzb5mwAAAADtwUUpIYcPH9abb76phQsXKiEhQefOndPatWtVVlamhQsX\n6vDhw1q6dKlGjx6tHTt2qLi4WMuXL9c333yj+fPna/DgwXXW27x5s+Li4rR48WLV1tbqscce07Bh\nw7Rz504NHz5cEydOlOM4qq6u1sCBA1VQUKC8vDxJ0pEjR7R9+3YtWrRIbrdbv/3tb7V161aNHTtW\n1dXVysjI0OTJk1VTU6NZs2bp8ccfV69evbRq1Sq98847uu222+rM8swzz+jo0aP19nnChAkaO3as\nJDW4n9Lfj3IUFBQoISFBy5cv16FDhzRv3rzIOt/NdM8992jdunV67733dOedd7bdHwcAAACw7KKU\nkD179mj06NFKSEiQJMXHx0uSRo0aJUlKTU3VN998I0nat2+frr32WklSYmKiBg8erK+++kppaWmR\n9T7//HMVFxdrx44dkqTz58/r6NGj6tevn55//nmFQiGNHDlSffv2rTdLYWGhDh48qPnz58txHNXU\n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\nAAAAYBQlBAAAAIBRlBAAAAAARlFCAAAAABhFCQEAAABgFCUEAAAAgFF8T0gHkndLuu0ROiWPx6NQ\nKGR7jE6L/OtKjuefdQBA+8f/rTqQgd2jbY/QKfl8PpWXl9seo9MifwAALj2cjgUAAADAKEoIAAAA\nAKMoIQAAAACMooQAAAAAMIoSAgAAAMAoSggAAAAAoyghAAAAAIyihAAAAAAwihICAAAAwChKCAAA\nAACjvLYHaCtZWVnq27evwuGwPB6PpkyZooyMDJWWlmr27Nnq06ePamtrNWjQIGVnZ9set0lee+01\nXXbZZbr99tttjwIAAAC0mQ5zJCQ2NlZ5eXlatmyZ7r33Xq1fvz5yXa9evSLXHTp0SLt27bro84TD\n4Yt+HwAAAMClqMMcCXEcJ3K5srJSCQkJ9bZxu90aMGCAjh071qQ1p0+fruuvv16ffPKJwuGwZs+e\nrZSUFFVUVOj555/XiRMnFBMTo5/97GdKS0vTa6+9puPHj+v48eP6wQ9+oKFDh+qjjz5SdXW1jh07\npttvv121tbXaunWroqKiNH/+fMXHx+t///d/9d577ykUCqlXr16aMWOGoqOj2ywbAAAAoD3pMCUk\nGAwqJydHwWBQZWVlWrBgQeS67wpKdXW1CgsLlZWVpaqqKi1YsEAul6veWrNmzVKfPn0kSYmJicrL\ny9M777yjt99+Wz//+c+Vn5+vf/7nf9bcuXO1Z88erVq1SkuXLpUkHTlyRAsXLpTX69WWLVt0+PBh\nLV26VNXV1Zo1a5buu+8+5eXlae3atfrggw902223afTo0Ro3bpwk6Q9/+IM2b96sW2655WJHBgAA\nAFjRYUpITEyM8vLyJEn79+/XqlWrtHz5cknS8ePHlZOTI0kaNWqUhg8fLkmR4vCPXH311ZKk9PT0\nyGlc+/bt05w5cyRJQ4YMUUVFhc6fPy9Juuqqq+T1/j1Wv9+vmJgYxcTEKD4+XldddZUkKS0tTcXF\nxZKk4uJivfrqqzp37pyqq6s1bNiw1oUBAAAAtGMdpoRcKCMjQ2fPntXZs2cl/f09IRe68EjIhady\nuVyuOkdCoqKiJH17KlcoFJJU99SvC28nffvelAtdWEguXM/lckXWW716tebNm6e0tDRt2bJFRUVF\nje5jIBBQIBCI/JyZmSmfz9fo7dD2oqOjyd4i8reL/O0he7vI3y7ytys/Pz9y2e/3y+/3N3uNDlNC\n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\n5s2bZ3r8S15j+W/cuFGbN2+Wx+NRly5dNHXq1Mi//Tz2W681+fP4b53Gsn/33XdVUFAgt9utyy67\nTD/72c8i/6/leU/rtTT/Fj3vcdBuhUIhZ8aMGc6JEyecmpoa5+GHH3YOHz5cZ5uCggLnhRdecBzH\ncbZt2+asXLnScRzHOXTokDN37lyntrbWOX78uDNjxgwnHA4b34dLWWvyP3HihDNnzhzjM3ckTcm/\ntLTU+b//+z9n1apVzo4dOyK/Ly8vd2bMmOGcO3fOqaioiFxG07Qme8dxnMmTJ5sct8NpSv6BQMCp\nrq52HOfbf4e++7eHx37rtSZ/x+Hx3xpNyf78+fORyx999JHz5JNPOo7D85620Jr8W/K8h9Ox2rEv\nv/xSvXv31g9+8AN5vV5de+21+uijj+ps89FHH0Ve5brmmmu0Z88eSdLHH3+sMWPGyOPxqEePHurd\nu7e+/PJL4/twKWtJ/oWFhZHrHD7zoVWakn9ycrLS0tLkcrnq/P6zzz7T0KFDFRcXp/j4eA0dOlS7\nd+82Of4lrTXZSzz2W6sp+Q8ePFjR0dGSpIyMDJ0+fVoSj/220Jr8JR7/rdGU7GNjYyOXq6qqIv8G\n8byn9VqTv9T8xz6nY7Vjp0+fVvfu3SM/JyUl1fsP6sJt3G634uLiVFFRodOnTysjI6PObS/8RxKN\na0n+8fHxqqiokCSVlpYqJydHcXFxysrK0sCBA80N3wE0Jf/m3JbHf9O1JntJqqmp0fz58+XxeHTH\nHXdo1KhRF2PMDqu5+W/evFnDhw//3tvy2G+e1uQv8fhvjaZmX1BQoI0bNyoUCmnBggWR2/K8p3Va\nk7/U/Oc9lJBLTEOvOjakoTba1Nvi+zWW4Xe5d+vWTatXr1ZCQoIOHDigZcuWaeXKlXVeQUDztebx\nj9Zpzr8fzz//vLp27aoTJ04oNzdXl19+uXr06HERp+v4vi//Dz/8UAcOHNATTzwhicf+xdLU/CUe\n/22toexvvvlm3Xzzzdq2bZtef/11TZ8+nec9F0lT82/J8x5Ox2rHkpKSdPLkycjPp0+fVrdu3eps\n0717d506dUqSFA6HVVlZqYSEBHXv3r3ObU+dOlXvtvjHWpL/+fPnlZCQIK/Xq4SEBElSenq6evXq\npZKSEnPDdwBNyf/7NPT4T0pKavMZO6rWZC9JXbt2lST16NFDfr9fBw8ebPMZO7Km5v/555/rzTff\nVE5Ojrzeb19T5LHfeq3JX+Lx3xrN/bdnzJgxkdOFeN7Teq3JvyXPeygh7Vj//v117NgxlZaWqra2\nVtu2bdPIkSPrbHPVVVfpgw8+kCT95S9/0ZAhQyRJI0eO1Pbt21VbW6sTJ07o2LFj6t+/v/F9uJS1\nJv+zZ88qHA5Lko4fP65jx46pZ8+eZnfgEteU/C904atgw4YNU2FhoSorK1VRUaHCwkI+JaUZWpP9\nuXPnVFtbK+nb/w727dun1NTUiz5zR9KU/A8ePKgXXnhB8+bNk8/ni/yex37rtSZ/Hv+t05Tsjx07\nFrn8ySefqHfv3pJ43tMWWpN/S5738I3p7dzu3bv14osvynEc3XTTTfrJT36i/Px89evXT1dddZVq\namr07LPP6uuvv5bP59MvfvGLyGHfDRs2aPPmzfJ6vXxUXQu1NP+dO3cqPz9fHo9HbrdbmZmZGjFi\nhO3dueQ0lv9XX32lp59+WufOnVNUVJS6du2q5cuXS/r2Y0rfeOMNuVwuPqa0BVqa/f79+/Wb3/xG\nbrdbjuNowoQJuuGGG2zvziWnsfwXLlyoQ4cOqVu3bvU+CpbHfuu1NH8e/63XWPZr1qxRYWGhvF6v\n4uPjNWXKlEjR43lP67U0/5Y876GEAAAAADCK07EAAAAAGEUJAQAAAGAUJQQAAACAUZQQAAAAAEZR\nQgAAAAAYRQkBAAAAYBQlBAAAAIBRlBAAAAAARv0/9HcykN7BtaYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2e062cc3198>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12, 6))\n",
    "plt.barh(range(10), dtc.feature_importances_, align='center', tick_label=vec.get_feature_names())\n",
    "plt.savefig('feature_imp.png')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Understanding decision rules\n",
    "\n",
    "Two of the most commonly used criteria for making decisions are the following:\n",
    "\n",
    "- `criterion='gini'`: The Gini impurity is a measure of misclassification, with the aim of minimizing the probability of misclassification.\n",
    "\n",
    "- `criterion='entropy'`: In information theory, entropy is a measure of the amount of uncertainty associated with a signal or distribution.\n",
    "\n",
    "In Scikit-Learn, you can specify the split criterion in the constructor of the decision tree call. For example, if you want to use entropy, you would type the following:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "dtce = tree.DecisionTreeClassifier(criterion='entropy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeClassifier(class_weight=None, criterion='entropy', max_depth=None,\n",
       "            max_features=None, max_leaf_nodes=None,\n",
       "            min_impurity_split=1e-07, min_samples_leaf=1,\n",
       "            min_samples_split=2, min_weight_fraction_leaf=0.0,\n",
       "            presort=False, random_state=None, splitter='best')"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dtce.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dtce.score(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.40000000000000002"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dtce.score(X_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "with open(\"tree.dot\", 'w') as f:\n",
    "    f = tree.export_graphviz(dtce, out_file=f,\n",
    "                            feature_names=vec.get_feature_names(),\n",
    "                            class_names=['A', 'B', 'C', 'D'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## Controlling the complexity of decision trees\n",
    "\n",
    "There are two common ways to avoid overfitting:\n",
    "\n",
    "- pre-pruning: This is the process of stopping the creation of the tree early.\n",
    "\n",
    "- post-pruning (or just pruning): This is the process of first building the tree but then removing or collapsing nodes that contain only little information.\n",
    "\n",
    "\n",
    "There are a number of ways to pre-prune a tree, all of which can be achieved by passing optional arguments to the `DecisionTreeClassifier` constructor:\n",
    "\n",
    "- limiting the maximum depth of the tree via the `max_depth parameter`\n",
    "\n",
    "- limiting the maximum number of leaf nodes via `max_leaf_nodes`\n",
    "\n",
    "- requiring a minimum number of points in a node to keep splitting it via `min_samples_split`\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": true,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "dtc0 = tree.DecisionTreeClassifier(criterion='entropy', max_leaf_nodes=6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeClassifier(class_weight=None, criterion='entropy', max_depth=None,\n",
       "            max_features=None, max_leaf_nodes=6, min_impurity_split=1e-07,\n",
       "            min_samples_leaf=1, min_samples_split=2,\n",
       "            min_weight_fraction_leaf=0.0, presort=False, random_state=None,\n",
       "            splitter='best')"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dtc0.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dtc0.score(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.40000000000000002"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dtc0.score(X_test, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "<!--NAVIGATION-->\n",
    "< [Using Decision Trees to Make a Medical Diagnosis](05.00-Using-Decision-Trees-to-Make-a-Medical-Diagnosis.ipynb) | [Contents](../README.md) | [Using Decision Trees to Diagnose Breast Cancer](05.02-Using-Decision-Trees-to-Diagnose-Breast-Cancer.ipynb) >"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
